/**
 * @description sequelize 实例
 * @todo 测试连接池最优配置
 */
const Sequelize = require('sequelize')
const { MYSQL_CONF } = require('../conf/db')
const { isProd, notDev } = require('../utils/env')

const { database, host, user, password } = MYSQL_CONF

const conf = {
  host,
  dialect: 'mysql', // 数据库类型
  query: { // 查询默认配置
    raw: true, // 返回原始数据（而非 Sequelize 封装后的数据）
  },
  timezone: '+08:00' // 配置时区
}

// 正式环境不打印 sequelize 的 SQL 语句
if (notDev) {
  conf.logging = () => {}
}

// 如果是线上，需要设置连接池
if (isProd) {
  conf.pool = {
    max: 20, // 连接池中的最大连接数量
    min: 0,
    idle: 10000, // 如果一个连接池 10s 内没有被使用，则释放，再用到时再创建
  }
}

// 创建 sequelize 实例
// 参数依次是：数据库名、用户名、密码、配置项
const seq = new Sequelize(database, user, password, conf)

module.exports = seq
